/**
 * 浏览器端数据获取工具
 * 可以在浏览器控制台中运行，用于从远程服务器获取数据并保存到localStorage
 */

// 获取远程数据并保存到localStorage
async function fetchAndSaveRemoteData() {
  try {
    console.log('正在获取远程数据...');
    
    // 尝试多种方式获取数据
    const methods = [
      // 方法1: 直接访问本地开发服务器API
      () => fetch('/yee-list?pageno=1&pagesize=100'),
      
      // 方法2: 如果有axios实例，使用axios
      () => {
        if (typeof window !== 'undefined' && typeof window.axios !== 'undefined') {
          return window.axios.get('/yee-list', {params: {pageno: 1, pagesize: 100}})
            .then(response => response.data ? response.data : response);
        } else {
          throw new Error('Axios未定义');
        }
      }
    ];
    
    let data = null;
    let methodIndex = 0;
    let lastError = null;
    
    // 尝试每种方法
    for (methodIndex = 0; methodIndex < methods.length; methodIndex++) {
      try {
        console.log(`尝试方法 ${methodIndex + 1}...`);
        const response = await methods[methodIndex]();
        
        // 处理fetch和axios的不同响应格式
        data = response.data || response;
        
        // 检查是否为有效的JSON对象
        if (data && typeof data === 'object') {
          console.log(`方法 ${methodIndex + 1} 成功获取数据`);
          break;
        } else {
          throw new Error('响应不是有效的JSON对象');
        }
      } catch (error) {
        lastError = error;
        console.warn(`方法 ${methodIndex + 1} 失败:`, error.message);
      }
    }
    
    // 如果所有方法都失败了
    if (!data) {
      throw new Error(`所有数据获取方法都失败了。最后一个错误: ${lastError.message}`);
    }
    
    console.log('成功获取数据:', data);
    
    // 保存到localStorage
    localStorage.setItem('remote-fetched-data', JSON.stringify(data));
    console.log('数据已保存到localStorage中的 remote-fetched-data 键');
    
    // 显示保存的数据
    console.log('验证保存的数据:', JSON.parse(localStorage.getItem('remote-fetched-data')));
    
    return data;
  } catch (error) {
    console.error('获取远程数据失败:', error);
    
    // 提供备选方案
    console.log('尝试使用本地存储的数据...');
    const localData = getSavedRemoteData();
    if (localData) {
      console.log('使用本地存储的数据:', localData);
      return localData;
    } else {
      console.log('没有本地存储的数据，使用模拟数据...');
      const mockData = {
        list: [
          {
            flag: 'welcome-project',
            title: '欢迎使用H5可视化编辑器',
            desc: '这是一个示例项目，展示了编辑器的基本功能',
            content: JSON.stringify({
              bgm: null,
              script: null,
              pages: [{
                name: '示例页面',
                eIndex: 0,
                style: {
                  backgroundColor: '#ffffff'
                },
                elements: []
              }]
            }),
            updateTime: new Date().toISOString()
          }
        ],
        count: 1
      };
      
      localStorage.setItem('remote-fetched-data', JSON.stringify(mockData));
      console.log('已创建并保存模拟数据');
      return mockData;
    }
  }
}

// 从localStorage获取已保存的数据
function getSavedRemoteData() {
  try {
    const data = localStorage.getItem('remote-fetched-data');
    if (data) {
      return JSON.parse(data);
    }
    console.log('localStorage中没有找到保存的远程数据');
    return null;
  } catch (error) {
    console.error('读取保存的远程数据失败:', error);
    return null;
  }
}

// 清除已保存的数据
function clearSavedRemoteData() {
  localStorage.removeItem('remote-fetched-data');
  console.log('已清除保存的远程数据');
}

// 使用示例:
/*
// 获取并保存远程数据
fetchAndSaveRemoteData().then(data => {
  console.log('获取到的数据:', data);
}).catch(error => {
  console.error('操作失败:', error);
});

// 获取已保存的数据
const savedData = getSavedRemoteData();
if (savedData) {
  console.log('已保存的数据:', savedData);
}

// 清除已保存的数据
clearSavedRemoteData();
*/

export {
  fetchAndSaveRemoteData,
  getSavedRemoteData,
  clearSavedRemoteData
};

export default {
  fetchAndSaveRemoteData,
  getSavedRemoteData,
  clearSavedRemoteData
};